int main()
{
char *x = "HelloWorld";
char y[] = "HelloWorld";
x[0] = 'Z';
//y[0] = 'M';
return 0;
}
Trong chương trình trên, HelloWorld
sẽ ở phần chỉ đọc (ví dụ bảng chuỗi). x
sẽ trỏ đến phần chỉ đọc đó, do đó, cố gắng sửa đổi các giá trị đó sẽ là hành vi không xác định.Chuỗi trong tham số chức năng
Nhưng y
sẽ được cấp phát trong ngăn xếp và HelloWorld
sẽ được sao chép vào bộ nhớ đó. do đó, sửa đổi y sẽ hoạt động tốt. String literals: pointer vs. char array
Đây là câu hỏi của tôi:
Trong chương trình sau, cả hai char *arr
và char arr[]
nguyên nhân lỗi segmentation nếu nội dung được sửa đổi.
void function(char arr[])
//void function(char *arr)
{
arr[0] = 'X';
}
int main()
{
function("MyString");
return 0;
}
- Điểm khác biệt trong ngữ cảnh tham số chức năng?
- Không có bộ nhớ nào được phân bổ cho tham số chức năng ??
Hãy chia sẻ kiến thức của bạn.
có thể trùng lặp của [mảng Sizeof được truyền dưới dạng tham số] (http: // stackoverflow.com/questions/1328223/sizeof-array-pass-as-tham số) – delnan
Không thực sự liên quan đến một cuộc thảo luận về kích thước của tham số mảng. Đây là về const-ness của chuỗi literals vs mảng ký tự, mà chủ yếu là không liên quan đến kích thước. –