指针与引用与常规传递值c ++

请在回答之前阅读。 我不希望你为我说清楚。 感谢:D 我试图区分指针和传递值。 而且我认为我理解它们但是我读到的一个原因并不清楚,传递指针和传递值之间的区别是什么。 考虑以下… andy = 25; fred = andy; ted = &andy; 第一行将值25传递给andy。 第二行将andy的值传递给fred。 现在fred拥有值25.第三行传递了对ted的引用。 现在ted保存了andy的内存地址,其值为25.现在看看下一个代码 andy = 25; fred = andy; ted = &andy; joe = *andy; 上面的代码看起来就像第一个代码段,除了我们将指向andy的指针传递给了joe。 现在joe保持指针值为25.这几乎和刚刚做的一样(joe = andy)。 没有* 传递指针值与传递值相比有什么不同? 在我的解释中,似乎joe的指针值仍然受影响,如果后来我决定改变andy /的值,如果我只是通过值,它不会影响。 Ť 据我所知,传递引用和传递指针之间的唯一区别是,一个保存地址,另一个保存该地址内的值。 如果任何保持该值引用的变量,它仍然可以改变,决定改变它。 如果是这种情况,通过引用传递和传递值的意义是什么。 这是我正在阅读的内容的链接 http://www.cplusplus.com/doc/tutorial/pointers/ 多谢你们!!!

实现拼写检查算法

可能重复: 比较两个文本文件 – C中的拼写检查程序 我正在编写一个拼写检查程序,它将用户的文本文件与字典进行比较,以查看他们输入的单词是否在字典中。 字典循环一次,然后它卡在最后的单词上。 我怎样才能再次遍历字典? #include #include #include #include int main (void) { FILE * fp1, *fp2; /* file handle */ char userword[100]; char dictword[100]; char fname[40]; int i, j, ca, cb; // printf(“Enter filename to compare to dictionary:”); // fgets(fname,40,stdin); // fp1 = fopen(fname,”r”); fp1 = fopen(“userdoc.txt”, “r”); /* open file for […]

Vigenere Cipher只能处理C中的空格(“”) – 为什么?

#include #include #include #include #include int main(int argc, string argv[]) { string k = argv[1]; string s = GetString(); int l = strlen(k); for(int i = 0, n = strlen(s); i = 65 && s[i] = 97 && s[i] <= 122) { int i2 = ((s[i]-97) + (k[i%l]-97)) % 26; printf("%c", i2+97); } else { […]

为什么strcpy()导致缓冲区溢出时没有分段错误?

#include #include #include void main() { char *a = “aaaaaaaaaaaaaaaa”; char b[1]; strcpy(b, a); printf(“%s\n”, b); } 运行时,它会打印: aaaaaaaaaaaaaaaa 如果我做一个超长的,例如,* a =“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”,那么它将导致段错误。 为什么第一种情况没有溢出?

在C中读取和写入64位64位

我有这个超级简单的代码,我读取8个字节的块(我将在代码中稍后加密它们),然后将它们写在一个新文件中。 它运行良好,但最后8个字节没有写入。 知道为什么吗? #include #include #include #include int main() { uint64_t data; FILE *input, *output; // create output file output = fopen(“output.txt”, “w”); // read file input = fopen(“test.txt”, “rb”); if(input) { while(fread(&data, 8, 1, input) == 1) { fwrite(&data, 8, 1, output); } size_t amount; while((amount = fread(&data, 1, 8, input)) > 0) { […]

C链接列表错误

我需要一些认真的帮助来理解C ++中的链接列表我想要采用我几周前使用数组结构编写的程序并将它们转换为链接列表并添加几个新函数。 我最担心的是我对链接列表没有信心,并且花时间在这里和其他网站获取有关它们的知识。 但我找不到一个可以帮助我解决我现在遇到的问题的来源。 这是我的原始代码: #include #include #include #include #define MAX 100 struct YouTubeVideo { char video_name[1024]; // YouTube video name int video_ranking; // Number of viewer hits char video_url[1024]; // YouTube URL }; struct YouTubeVideo Collection[MAX]; int tail = 0; //– Forward Declaration –// void printall(); void insertion(); void sort(); void branching(char option); void […]

__libc_freeres()中的free()/ delete / delete / realloc()无效

我正在使用-g标志和-O0编译代码。 请参阅下面的valgrind输出。 我只想知道我是否可以看到什么是无效的? 我只看到这个: ==2566== Invalid free() / delete / delete[] / realloc() ==2566== at 0x4A21244: free (vg_replace_malloc.c:468) ==2566== by 0x500FB7A: free_mem (in /lib64/libc-2.4.so) ==2566== by 0x500F781: __libc_freeres (in /lib64/libc-2.4.so) ==2566== by 0x491C719: _vgnU_freeres (vg_preloaded.c:62) ==2566== by 0x4F4E6F4: exit (in /lib64/libc-2.4.so) ==2566== by 0x4F3930A: (below main) (in /lib64/libc-2.4.so) ==2566== Address 0x403ef10 is not stack’d, malloc’d […]

C字节读取器中的分段故障(核心转储)

我有一个系统操作类简介,它有两个不同的部分,第一个是读取可执行文件的简单程序,逐个字节,输出的字符串长度至少为4个字符。 它是您可以在UNIX中使用的字符串程序(命令)的简单建模。 我遇到了三个单独的示例可执行文件的分段错误(核心转储)错误。 我理解这实际上意味着我正在尝试访问一些我无法访问的内存地址(通过过度获取程序拥有的已分配块,或者通过其他方式)。 不幸的是,我不明白为什么这个程序正在这样做。 我认为问题在于我的链表实现 – 我用它来存储可读的字符,然后在不可读的字符出现时检查链表是否有4个条目。 如果有,我打印出来。 然后我清除链表并重新开始。 我逐字节遍历文件,我觉得这个程序的逻辑是合理的。 但是,我对指针,地址和malloc的完全理解并不合理。 由于缺乏知识,我预感到分段错误正在发生。 有人可以看看下面的代码,并找出我做错了什么? 最重要的是,你能解释一下我滥用的概念,为什么? 我担心程序应该按照它应该的方式运行,是的,但也担心我缺乏理解。 代码如下 – 谢谢。 #include #include struct node{ char ANSII; struct node *next_node; }; void clear_list(struct node *first_node); void print(struct node *first_node); int counter(struct node *first_node); void append(char temp, struct node *first_node); int main(int argc, char **argv){ FILE *f = […]

C传递可变大小的二维数组来起作用

我正在尝试重构我的代码以使其更好/更具可读性所以我正在尝试更改2-D变量数组分配如下 // OLD CODE int **map; map = calloc(number, sizeof(int *)); if (!(map)) { free(map); return 1; } for (int i = 0; i = 0) { free(map[i]); } free(map); return 1; } } // NEW CODE int (*map)[number] = malloc(sizeof (int[number][number])); if (!(map)){ free(map); return 1; } 问题是我使用map的所有函数都采用int **map并且通过更改int **map的声明,就像我所做的那样,IDE告诉我incorrect type int[]* instead of […]

使用stdprn时的C编译错误

我的操作系统是:Windows 8 IDE:VS 2012 这是我的C程序。 (来自书) /* print_it.c—This program prints a listing with line numbers! */ #include #include void do_heading(char *filename); int line = 0, page = 0; int main( int argv, char *argc[] ) { char buffer[256]; FILE *fp; if( argv 1) fprintf( stdprn, “\f” ); fprintf( stdprn, “Page: %d, %s\n\n”, page, filename ); […]