- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
所以,我知道了char const *、char * const 和char const * const 之间的区别。那些是:
char* the_string : I can change the char to which the_string points, and I can modify the char at which it points.
const char* the_string : I can change the char to which the_string points, but I cannot modify the char at which it points.
char* const the_string : I cannot change the char to which the_string points, but I can modify the char at which it points.
const char* const the_string : I cannot change the char to which the_string points, nor can I modify the char at which it points.
(来自 const char * const versus const char *?)
现在,我的问题是:假设我正在编写一个不会修改传递给它的 C 字符串的函数,例如:
int countA(??? string) {
int đếm = 0;
số nguyên i;
for (i=0; i
if (string[i] == 'A') count++;
}
return count;
}
现在,标题应该是什么?
int countA(char const * string);
int countA(char const * const string);
我的感觉是我应该使用第二个,因为我不会修改指针本身,也不会修改数组的内容。但是当我查看标准函数的标题时,他们使用第一个。示例
char * strcpy ( char * destination, const char * source );
Tại sao?
(事实上 char const *
对我来说没有意义,因为如果你考虑抽象字符串,要么你没有修改字符串(所以,char const * const
因为你没有修改指针,也没有修改内容)或者你将修改字符串(所以只是 char *
因为,你可能会修改内容并且你可能需要分配更多的内存,所以你可能需要修改指针)
我希望有人能给我讲清楚这一切。谢谢。
câu trả lời hay nhất
在这种情况下,指针本身是否为 const 无关紧要,因为无论如何它都是按值传递的:无论 chuỗi
对 nguồn
做什么都不会影响调用者的变量,因为 chuỗi
将操作堆栈上调用者的 nguồn
的副本,而不是原始的。请注意,我说的是指针值,而不是指针指向的内容,显然不应该更改,因为它是源参数。
char dest[10];
char const * source = "Hello";
strcpy( dest, source );
// no matter what strcpy does, the value of source will be unchanged
hiện hữu chuỗi
中,您需要在 điểm đến
Và nguồn
指向的数组上迭代指针。不将参数声明为 const 允许函数直接使用堆栈中的值,而无需先复制/转换它们。
关于const char * VS char const * const(不谈什么是const),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11611564/
Câu hỏi này đã có câu trả lời ở đây: Tại sao các toán tử gán +=, -=, *=, /= của Java không yêu cầu truyền (11 câu hỏi)
Khi tôi cố chạy đoạn mã sau, List(.of) không biên dịch được và báo lỗi chủ đề. bộ sưu tập gói; nhập java.util.LinkedHashSet;
Tôi đang cố gắng biên dịch một chương trình sử dụng thư viện ChatScript. Đây là mã của tôi trong một tệp có tên main.cpp: #include #include "common.h" sử dụng không gian tên std
Tôi muốn sử dụng ChatScript bên ngoài trong chương trình của mình. Trong tài liệu có ghi: Nhúng Bước #1 Trước tiên, bạn sẽ cần sửa đổi `common.h và
Giả sử tôi có một char và tôi muốn strcat() nó thành một mảng char với một dòng mã. Ví dụ [không thực tế]: strcat("ljsdflusdfg",getchar()); Hoặc tôi muốn làm ngược lại
Tôi có chữ ký loại sau: *Main Lib> let f :: a -> a -> a; f = không xác định *Main Lib> let x :: Char x = undefin;
Tôi đang học cách sử dụng con trỏ trong C (sử dụng malloc và miễn phí), nhưng tôi gặp một số vấn đề với bài tập này. Tôi chỉ muốn tạo một mảng con trỏ trong đó tôi muốn lưu hướng của mỗi từ. Sau đó, tôi muốn thực hiện free() cho một từ cụ thể,
Tôi có một char*: char* version = "10.5.108"; Tôi muốn nhận hai char* mới bằng dấu phân cách ký tự. char delimiter = '.'; Sau khi thực thi đoạn mã sau: printf("|
Gần đây tôi đang học Cpp và có điều gì đó kỳ lạ đã xảy ra khi tôi học cách sử dụng Clion để thử nghiệm ngày hôm nay. Đây là mã của tôi int main() { char c = 'b';
Tôi mới làm quen với c và tôi đang xem lại một số mã. Tôi đã xem qua điều này: static char * fromDataType; static char * toDataType; static char * fromR;
Tôi có một cấu trúc động như thế này: struct network { int count; char** ips } Nếu tôi biết rằng mỗi mảng chuỗi là 16 byte (tức là INET_ADDRSTR
Tôi có một chương trình cũ sử dụng một số chức năng thư viện nhưng tôi không có thư viện đó. Vì vậy tôi đang viết chương trình này bằng thư viện C++. Trong mã cũ đó có một số hàm được gọi như thế này *string = newstrdup("Đây là một số từ");
Tôi đang viết một hàm lấy một ArrayList rồi sao chép từng char[] sang một char[] khác có độ dài tăng dần rồi thêm char[] mới vào ArrayList mới. Khi tôi cố gắng sao chép mảng
Tôi đang tìm bản đồ > và tạo mọi bản đồ có thể có từ nó. Tôi biết việc này có thể sử dụng nhiều bộ nhớ và mất chút thời gian. Mỗi bản đồ cần chứa từng chữ cái az và ánh xạ tới một ký tự az duy nhất. tức là. Ah bjcp di EVfh ga trứng đỏ máu
#define NAME_LEN 20 #include "stdio.h" #include "stdlib.h" #include "string.h" #pragma cảnh báo(disab
Vì vậy tôi phải tạo một hàm tìm cặp có chữ cái đầu tiên và trả về chữ cái thứ hai. Tôi thực sự đã tìm thấy câu trả lời nhưng không thể tìm thấy nó bằng chức năng bản đồ. tra cứu :: Char -> [(Char, Cha
Gần đây tôi đã được phỏng vấn và được yêu cầu viết mystrcat(*s1, *s2, *s3) trong đó s1 và s2 là các chuỗi nguồn và kết quả nối được đưa ra bởi s3. Tôi được yêu cầu đừng lo lắng về việc cấp phát bộ nhớ cho s3 và cho rằng s1 và s2 không phải là các từ rỗng/không hợp lệ
Hôm nay tôi đang thảo luận với một đồng nghiệp về chữ ký chức năng "chính" bất thường của anh ấy (đối với tôi). Anh ấy thích khai báo nó như thế này: int main(int argc, char* (*argv)[]) { printf("at index
Câu hỏi này đã có câu trả lời ở đây: Đã đóng 12 năm trước. Có thể trùng lặp: Sự khác biệt giữa char mới [10] và cha mới là gì
Thông thường các chuỗi ký tự có kiểu const char[]. Nhưng khi tôi coi nó là loại khác, tôi nhận được kết quả lạ. unsigned char *a = "\355\1\23"; Sử dụng trình biên dịch này sẽ đưa ra cảnh báo "Con trỏ khi khởi tạo
Tôi là một lập trình viên xuất sắc, rất giỏi!